# encoding: utf-8
# @File  : get_package_and_activity.py
# @Author: wu shaofan
# @Date  :  2024/06/18
# @Desc : 获取app的包名和界面名(前提是app已经启动), 获取设备ID(前提是设备已经连接)、获取设备系统版本号(前提是设备已经连接)
import subprocess
from utils.set_config import SetConfig


def get_focused_app_details():
    """
    使用ADB命令获取当前焦点应用的包名和界面名，并解析输出以提取详细信息。
    :return: 返回一个字符串，包含当前焦点应用的包名和界面名
    """
    try:
        # 执行ADB命令并通过findstr过滤输出
        parm = "adb shell dumpsys window windows | findstr mFocusedApp"
        result = subprocess.run(parm, shell=True, capture_output=True, text=True)
        if result.stdout:
            # 分割字符串以提取包名和活动名
            parts = result.stdout.strip().split()
            for part in parts:
                if '/' in part:
                    # 假设包名和活动名是第一个包含'/'的部分
                    package_activity = part.split('/')[0] + '/' + part.split('/')[1].split('}')[0]
                    return package_activity
        else:
            return "没有有效的包/没有找到界面名"
    except subprocess.CalledProcessError as e:
        return f"执行adb命令失败: {e}"


def get_device_id():
    """
    使用ADB命令获取设备ID。
    :return: 返回一个字符串，包含设备ID
    """
    try:
        # 执行ADB命令并通过findstr过滤输出
        result = subprocess.run('adb devices', shell=True, capture_output=True, text=True)
        # 解析输出
        lines = result.stdout.splitlines()
        device_ids = []
        # 因为第一行是标题，跳过
        for line in lines[1:]:
            if "device" in line and "devices" not in line:
                device_id_01 = line.split('\t')[0]
                device_ids.append(device_id_01)

        if len(device_ids) == 0:
            return "电脑未连接设备信息，无法获取设备ID。。"
        else:
            return device_ids[0]
    except subprocess.CalledProcessError as e:
        return f"执行adb命令失败: {e}"


def get_android_version(device_id):
    """
    获取指定Android设备/模拟器的系统版本号。
    :param device_id: 设备ID
    :return: 系统版本号
    """
    try:
        # 执行adb命令获取系统版本号
        if device_id != "电脑未连接设备信息，无法获取设备ID。。":
            parm = f"adb -s {device_id} shell getprop ro.build.version.release"
            result = subprocess.run(parm, capture_output=True, text=True, check=True)
            # 返回系统版本号
            return result.stdout.strip()

        else:
            return "电脑未连接设备信息，无法获取系统版本号。。"
    except subprocess.CalledProcessError as e:
        return f"执行adb命令失败: {e}"


if __name__ == '__main__':
    # 调用函数并打印结果
    focused_app_info = get_focused_app_details()
    # 调用函数修改config.ini中的变量的值
    obj = SetConfig()
    # print(focused_app_info)

    # TODO 包名
    package = focused_app_info.split('/')[0]
    print("app的包名：", package)
    obj.set_config('caps', "appPackage", package)

    # TODO 界面名
    activity = focused_app_info.split('/')[1]
    print('app的界面名：', activity)
    obj.set_config('caps', "appActivity", activity)

    # TODO 设备ID
    device_id = get_device_id()
    print("设备ID：", device_id)
    obj.set_config('caps', "devicename", device_id)

    # TODO 系统版本号
    version = get_android_version(device_id)
    print("系统版本号：", version)
    obj.set_config('caps', "platformVersion", version)
